<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8">
		<title>Document</title>
	</head>
	<body>
		
	</body>
</html>
<script>
	// 函数作为参数
	/*
		函数定义语法
		function 函数名([参数1 [, 参数2 [, ...]]]) {
			statements
		}
	*/


	function sum(n1, n2) {
		// debugger;
		// n1 = 5, n2 = 3;
		return n1 + n2;
	}

	// function sub(n1, n2) {
	// 	return n1 - n2;
	// }

	// function mul(n1, n2) {
	// 	return n1 * n2;
	// }

	// function div(n1, n2) {
	// 	return n1 / n2;
	// }

	// 函数作为参数
	function calculate(n1, n2, func) {
		// debugger;
		// func = sum
		// n1 = 5, n2 = 3, func = sum;
		// sum(5, 3);
		// func = function(n1, n2) {
		// 	return n1 + n2;
		// }
		var r = func(n1, n2);
		return r;
	}


	// debugger;
	// sum是回调函数
	// A函数作为另一个B函数的参数, 在B函数中被调用, A函数被称为回调函数
	// B函数称为A的主调函数
	var r = calculate(5, 3, sum);
	console.log(r);
	// r = calculate(5, 3, sub);
	// console.log(r);	
	// r = calculate(5, 3, mul);
	// console.log(r);
	// r = calculate(5, 3, div);
	// console.log(r);

	// 也可以这样调用
	// n1 = 5, n2 = 6;
	// func = function(n1, n2) { return n1 + n2;}
	// r = calculate(5, 6, function(n1, n2) {
	// 	return n1 + n2;
	// });
	// console.log(r);


	function f1(n) {
		n += 1;
		return n;
	} 
	// console.log(f1(5));
	function f2(a, func) {
		var r = func(a);
		return r;
	}

	var num = f2(5, function(n) {
		n += 1;
		return n;
	});
	console.log(num);


	// 函数作为返回值
	function f3() {

		function f4() {
			return 5;
		}

		return f4;
	}
	var f5 = f3()();
	console.log(f5);






</script>